//package com.wjm.blog.core.filter;
//
//import com.wjm.blog.core.interceptor.CurrentUserArgumentResolver;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor;
//import org.springframework.web.method.support.HandlerMethodArgumentResolver;
//import org.springframework.web.servlet.config.annotation.*;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.Executors;
//
//
///**
// * @author SHOWMAKER
// * @version 1.0
// * @date 2021/6/30 11:43
// */
//
//@Configuration
//public class WebConfiguration extends WebMvcConfigurationSupport /*implements WebMvcConfigurer*/ {
//
//    @Autowired
//    private TokenInterceptor tokenInterceptor;
//
//    /**
//     * CurrentUser 注解参数解析器
//     *
//     * @return
//     */
//    @Bean
//    public CurrentUserArgumentResolver currentUserMethodArgumentResolver() {
//        return new CurrentUserArgumentResolver();
//    }
//
//    /**
//     * 参数解析器
//     *
//     * @param argumentResolvers
//     */
//    @Override
//    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
//        argumentResolvers.add(currentUserMethodArgumentResolver());
//        super.addArgumentResolvers(argumentResolvers);
//    }
//
//
//    /**
//     * 解决跨域请求
//     *
//     * @param registry
//     */
//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**")
//                .allowedHeaders("*")
//                .allowedMethods("*")
//                .allowedOrigins("*")
//                .allowCredentials(true);
//    }
//
//    /**
//     * 异步请求配置
//     *
//     * @param configurer
//     */
//    @Override
//    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
//        configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(3)));
//        configurer.setDefaultTimeout(30000);
//    }
//
//    /**
//     * 配置拦截器、拦截路径
//     * 每次请求到拦截的路径，就会去执行拦截器中的方法
//     *
//     * @param registry
//     */
//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//        //排除拦截，除了注册登录(此时还没token)，其他都拦截
//        List<String> excludePath = new ArrayList<>();
//        excludePath.add("/api/v1/login");
//        excludePath.add("/api/v1/loginOut");
//        //排除swagger
//        excludePath.add("/doc.html/**");
//        excludePath.add("/swagger-resources/**");
//        excludePath.add("/webjars/**");
//        excludePath.add("/v2/**");
//
//        registry.addInterceptor(tokenInterceptor)
//                .excludePathPatterns(excludePath)
//                .addPathPatterns("/**");
//        super.addInterceptors(registry);
//    }
//
//    @Override
//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("doc.html")
//                .addResourceLocations("classpath:/META-INF/resources/");
//        registry.addResourceHandler("/webjars/**")
//                .addResourceLocations("classpath:/META-INF/resources/webjars/");
//        super.addResourceHandlers(registry);
//    }
//}
